// 产品管理路由文件
// 该文件定义了产品管理相关的所有API路由

// 引入Express框架
const express = require('express');

// 创建路由实例
const router = express.Router();

// 引入multer中间件，用于处理文件上传
const multer = require('multer');

// 配置multer中间件用于处理文件上传
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // 确保uploads目录存在
    const fs = require('fs');
    const dir = 'uploads/';
    if (!fs.existsSync(dir)){
      fs.mkdirSync(dir, { recursive: true });
    }
    cb(null, dir);
  },
  filename: function (req, file, cb) {
    // 设置文件名：字段名+时间戳+原始文件名
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, file.fieldname + '-' + uniqueSuffix + '.' + file.originalname.split('.').pop());
  }
});

// 创建multer实例
const upload = multer({ 
  storage: storage,
  // 限制文件大小为10MB
  limits: {
    fileSize: 10 * 1024 * 1024
  },
  // 文件过滤器，只允许Excel文件
  fileFilter: function (req, file, cb) {
    // 检查文件类型是否为Excel文件
    if (file.mimetype === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || 
        file.mimetype === 'application/vnd.ms-excel' ||
        file.originalname.endsWith('.xlsx') || 
        file.originalname.endsWith('.xls')) {
      cb(null, true);
    } else {
      cb(new Error('只允许上传Excel文件(.xlsx, .xls)'));
    }
  }
});

// 引入产品路由处理函数
const productsHandler = require('../router_handler/products');

// 引入数据验证错误处理中间件
const handleValidationErrors = require('../middleware/handleValidationErrors');

// 引入产品数据验证规则
const { addProductSchema, updateProductSchema } = require('../schema/products');

// ==================== 产品相关路由 ====================

// 获取产品列表
// GET /products/list
router.get('/list', productsHandler.getProductList);

// 通过ID获取单个产品信息
// GET /products/:id
router.get('/:id', productsHandler.getProductById);

// 添加产品
// POST /products/add
router.post(
  '/add', 
  addProductSchema,              // 数据验证规则
  handleValidationErrors,         // 数据验证错误处理中间件
  productsHandler.addProduct    // 处理函数
);

// 更新产品信息
// PUT /products/update
router.put(
  '/update', 
  updateProductSchema,           // 数据验证规则
  handleValidationErrors,         // 数据验证错误处理中间件
  productsHandler.updateProduct // 处理函数
);

// 删除产品
// DELETE /products/:id
router.delete('/:id', productsHandler.delProduct);

// 批量操作产品
// POST /products/batch
router.post('/batch', productsHandler.batchProductOperation);

// 批量导入产品（Excel）
// POST /products/import
router.post('/import', upload.single('file'), productsHandler.importProducts);

// 导出路由实例
module.exports = router;